package ui;

import java.util.Date;
import java.util.List;

import servicios.GenericBusinessException;
import servicios.ServiciosCliente;
import servicios.ServiciosCriterio;
import servicios.ServiciosPedido;
import servicios.ServiciosProducto;
import dominio.Cliente;
import dominio.Pedido;
import dominio.Producto;

public class Fachada {
	private static Fachada instancia=null;
	
	public Fachada getInstancia(){
		if(instancia!=null){
			return instancia;
		}else{
				instancia=new Fachada();
			return instancia;
		}
	}
	
	public static List<Cliente> buscarClienteXNombre(String nombre)throws GenericBusinessException {
		return ServiciosCliente.buscarXNombre(nombre);
	}

	public static boolean eliminar(Cliente unCliente) throws GenericBusinessException {
		return ServiciosCliente.eliminar(unCliente);
		
	}

	public static List<Object> getListaClientes() throws GenericBusinessException {
		return ServiciosCliente.listarClientes();
	}

	public static void guardarCliente(Cliente unCliente) throws GenericBusinessException {
		ServiciosCliente.guardar(unCliente);
		
	}

	public static Cliente buscarCliente(int idCliente) throws GenericBusinessException {
		return ServiciosCliente.buscarXId(idCliente);
	}

	public static Producto buscarProducto(int idProducto) throws GenericBusinessException  {
		return ServiciosProducto.buscarXId(idProducto);
	}

	public static void guardarProducto(Producto unProducto) throws GenericBusinessException {
		ServiciosProducto.guardar(unProducto);
		
	}

	public static List<Object> getListaProductos() throws GenericBusinessException {
		return ServiciosProducto.listarProductos();
	}

	public static void eliminar(Producto unProducto) throws GenericBusinessException {
		ServiciosProducto.eliminar(unProducto);
		
	}

	public static List<Producto> buscarProductoXNombre(String text) throws GenericBusinessException {
		return ServiciosProducto.buscarXNombre(text);
	}

	public static List<Object> getListaPedidos() throws GenericBusinessException {
		return ServiciosPedido.listarPedidos();
	}

	public static int guardarPedido(Pedido pedidoActual) throws GenericBusinessException {
		return ServiciosPedido.guardar(pedidoActual);
	}

	public static void eliminar(Pedido pedidoActual) throws GenericBusinessException {
		ServiciosPedido.eliminar(pedidoActual);
		
	}

	public static List<Object> obtenerProductosNotIn(Pedido unPedido) throws GenericBusinessException {
		return ServiciosPedido.obtenerProductosNotIn(unPedido);
	}

	public static Pedido buscarPedido(int idPedido) throws GenericBusinessException {
		return ServiciosPedido.buscarPedido(idPedido);
	}

	public static Cliente buscarClienteXIdPedido(int idPedido) throws GenericBusinessException {
		return ServiciosCliente.buscarXIdPedido(idPedido);
	}

	public static void setCriterio(int i) throws GenericBusinessException {
		ServiciosCriterio.setCriterio(i);
		
	}

	public static List<Object> getPlanProduccion() throws GenericBusinessException {
		return ServiciosCriterio.getPlanProduccion();
	}

	public static Object calcularGanancia(Pedido unPedido) {
		return ServiciosPedido.calcularGanancia(unPedido);
	}

	public static int getCriterio() throws GenericBusinessException {
		return ServiciosPedido.getCriterio();
	}

	public static void finalizarPedido(Pedido pedido) throws GenericBusinessException {
		ServiciosPedido.finalizarPedido(pedido);
		
	}

	public static int getPedidoFinalizable(List<Object> resultado) {
		return ServiciosPedido.getPedidoFinalizable(resultado);
	}

	public static boolean productoEnPedido(int idProducto) throws GenericBusinessException {
		return ServiciosPedido.productoEnPedido(idProducto);
	}

	public static List<Producto> getCantProdFab() throws GenericBusinessException {
		return ServiciosProducto.getCantProdFab();
	}

	public static List<Pedido> getPedidosXFecha(Date fechaIni, Date fechaFin) throws GenericBusinessException {
		return ServiciosPedido.getPedidosXFecha(fechaIni, fechaFin);
	}

	public static List<Pedido> getPedidosNoFin() throws GenericBusinessException {
		return ServiciosPedido.getPedidosNoFin();
	}

	public static List<Object> getCriterios() throws GenericBusinessException {
		return ServiciosCriterio.getCriterios();
	}

	public static Object calcularTiempoProduccion(Pedido unPedido) {
		return ServiciosPedido.calcularTiempoProduccion(unPedido);
	}

}
